package br.com.unirio.autocar.dados;

import java.util.List;

import javax.persistence.Query;
import javax.persistence.TypedQuery;

import br.com.unirio.autocar.modelo.Automovel;
import br.com.unirio.autocar.modelo.Produto;

/**
 * Repositorio De Automovel
 * 
 * @author Carlos
 * 
 */
public class RepositorioDeAutomovel
{

    RepositorioGenerico<Automovel> repositorioDeAutomoveis;

    public RepositorioDeAutomovel()
    {
	super();
	repositorioDeAutomoveis = new RepositorioGenerico<Automovel>();
    }

    public void salvarAutomovel(Automovel automovel)
    {
	repositorioDeAutomoveis.salvar(automovel);
    }

    public Automovel obterAutomovelAPartirDeId(Long idAutomovel)
    {
	Automovel automovel = repositorioDeAutomoveis.obterPorId(Automovel.class, idAutomovel);
	return automovel;
    }

    public void removerAutomovel(Automovel automovel)
    {
	repositorioDeAutomoveis.excluir(automovel);
    }

    public void alterarAutomovel(Automovel Automovel)
    {
	repositorioDeAutomoveis.alterar(Automovel);
    }

    public List<Automovel> obterTodos()
    {
	return this.repositorioDeAutomoveis.obterTodos(Automovel.class);
    }

    public Automovel obterAutomovelAPartirDeIdProduto(Produto produto)
    {
	Query query =
		this.repositorioDeAutomoveis.getGerenciadorDeEntidade().createQuery(
			"FROM Automovel  WHERE produto = :produto");
	query.setParameter("produto", produto);
	return (Automovel) query.getSingleResult();
    }

    public List<Automovel> obterTodosOsAutomoveisAutoCar()
    {
	TypedQuery<Automovel> query =
		this.repositorioDeAutomoveis.getGerenciadorDeEntidade().createQuery(
			"FROM Automovel a JOIN FETCH a.proprietario p WHERE p.codigoIdentificador = :autoCarCodigo",
			    Automovel.class);
	query.setParameter("autoCarCodigo", "33.351.139");
	List<Automovel> automoveis = query.getResultList();
	return automoveis;
    }
}
